package com.iov.failurelog.utils;

import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author Administrator
 * @version 1.0
 * @description: TODO
 * @date 2023/11/28 10:06
 */
@Component
public class PoolDemoThread {

    // 配置线程池
    public static ThreadPoolExecutor threadPoolExecutor = null;

    /**CallerRunsPolicy: 拒绝策略 使用调用线程直接运行任务*/
    /**AbortPolicy: 默认拒绝策略，拒绝任务并抛出任务*/
    /**DiscardPolicy: 直接拒绝任务，不抛出错误*/
    /**DiscardOldestPolicy: 触发拒绝策略，只要还有任务新增，一直会丢弃阻塞队列的最老的任务，并将新的任务加入*/
    @PostConstruct
    public void thread() {
        threadPoolExecutor = new ThreadPoolExecutor(
                2, // 核心线程数
                5, // 最大线程数
                30, TimeUnit.SECONDS, // 超时时间及单位
                new ArrayBlockingQueue<>(15), // 队列
                new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 使用调用线程直接运行任务
        );
    }

}
